﻿<?xml version="1.0">
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="guid">
        <xs:restriction base="xs:string">
            <xs:pattern value="\{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="char">
        <xs:restriction base="xs:string">
            <xs:length value="1" />
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="NestedChildClass" nillable="true" type="NestedChildClass" />
    <xs:complexType name="NestedChildClass">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="1" name="Id" type="guid" />
            <xs:element minOccurs="0" maxOccurs="1" name="ChildFavLetter" type="char" />
            <xs:element minOccurs="0" maxOccurs="1" name="ChildName" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="NestedParentClass" nillable="true" type="NestedParentClass" />
    <xs:complexType name="NestedParentClass">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="1" name="ParentName" type="xs:string"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ParentAge" type="xs:integer"/>
            <xs:element minOccurs="0" maxOccurs="1" name="Id" type="guid" />
            <xs:element minOccurs="0" maxOccurs="1" name="FavoriteCharacter" type="char" />
            <xs:element minOccurs="0" maxOccurs="1" name="Child" type="NestedChildClass"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="MyMadeUpEnum" type="MyMadeUpEnum" />
    <xs:simpleType name="MyMadeUpEnum" >
        <xs:restriction base="xs:string">
            <xs:enumeration value="A" />
            <xs:enumeration value="B" />
            <xs:enumeration value="C" />
            <xs:enumeration value="D" />
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="Int16">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Int16" type="Int16" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Int32">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Int32" type="Int32" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Int64">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Int64" type="Int64" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Double">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Double" type="Double" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Single">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Single" type="Single" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ArrayOfChar">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="ArrayOfChar" type="char" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ArrayOfGuid">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="ArrayOfGuid" type="guid" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="String">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="String" type="String" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Byte">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Byte" type="Byte" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="UInt16">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="UInt16" type="UInt16" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="UInt32">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="UInt32" type="UInt32" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="UInt64">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="UInt64" type="UInt64" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DateTime">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="DateTime" type="DateTime" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Boolean">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Boolean" type="Boolean" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Decimal">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Decimal" type="Decimal" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Object">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Object" type="Object" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ArrayOfMyMadeUpEnum">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="ArrayOfMyMadeUpEnum" type="ArrayOfMyMadeUpEnum" />
        </xs:sequence>
    </xs:complexType>
    <xs:element name="ClassWithAllPrimitiveTypes" nillable="true" type="ClassWithAllPrimitiveTypes" />
    <xs:complexType name="ClassWithAllPrimitiveTypes">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="1" name="Int16" type="xs:short"/>
            <xs:element minOccurs="0" maxOccurs="1" name="Int32" type="xs:integer"/>
            <xs:element minOccurs="0" maxOccurs="1" name="Int64" type="xs:long"/>
            <xs:element minOccurs="0" maxOccurs="1" name="Double" type="xs:Double"/>
            <xs:element minOccurs="0" maxOccurs="1" name="Float" type="xs:Single"/>
            <xs:element minOccurs="0" maxOccurs="1" name="Char" type="char" />
            <xs:element minOccurs="0" maxOccurs="1" name="Guid" type="guid" />
            <xs:element minOccurs="0" maxOccurs="1" name="String" type="xs:string"/>
            <xs:element minOccurs="0" maxOccurs="1" name="Byte" type="xs:byte"/>
            <xs:element minOccurs="0" maxOccurs="1" name="UInt16" type="xs:unsignedShort"/>
            <xs:element minOccurs="0" maxOccurs="1" name="UInt32" type="xs:unsignedInt"/>
            <xs:element minOccurs="0" maxOccurs="1" name="UInt64" type="xs:unsignedLong"/>
            <xs:element minOccurs="0" maxOccurs="1" name="DateTime" type="xs:dateTime"/>
            <xs:element minOccurs="0" maxOccurs="1" name="Bool" type="xs:bool"/>
            <xs:element minOccurs="0" maxOccurs="1" name="Decimal" type="xs:decimal"/>
            <xs:element minOccurs="0" maxOccurs="1" name="Object" type="xs:Object"/>
            <xs:element minOccurs="0" maxOccurs="1" name="MyMadeUpEnum" type="MyMadeUpEnum" />
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfInt16" type="ArrayOfInt16"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfInt32" type="ArrayOfInt32"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfInt64" type="ArrayOfInt64"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfDouble" type="ArrayOfDouble"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfFloat" type="ArrayOfSingle"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfChar" type="ArrayOfChar" />
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfGuid" type="ArrayOfGuid" />
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfString" type="ArrayOfString"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfByte" type="ArrayOfByte"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfUInt16" type="ArrayOfUInt16"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfUInt32" type="ArrayOfUInt32"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfUInt64" type="ArrayOfUInt64"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfDateTime" type="ArrayOfDateTime"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfBool" type="ArrayOfBoolean"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfDecimal" type="ArrayOfDecimal"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfObject" type="ArrayOfObject"/>
            <xs:element minOccurs="0" maxOccurs="1" name="ListOfMyMadeUpEnum" type="ArrayOfMyMadeUpEnum" />
        </xs:sequence>
    </xs:complexType>
</xs:schema>